#include "message.h"
#include <pthread.h>
#include <stdio.h>
#include "glib.h"
#include "readFile.h"
#include "heartRequest.h"

gchar *gatewayIp='\0';
gchar *sn=NULL;


char * getGateWayIp(){

  if (gatewayIp!=NULL)
  {
     printf("从缓存中获取到gateWayIp了\n");
     return gatewayIp;
  }
  //如果没有gateway获取一些  
   //1 一进来没有做配置，是不能发心跳的,判断gateway是为null,提醒用户先去做配置  
  //2已经配置过了gateWayIp内存中不为null直接返回 
  //3已经配置过了但是重启动设备，内存没有，但是配置文件中有。 重新读取
  GKeyFile* configFile = g_key_file_new();
   if(g_key_file_load_from_file(configFile,"./config.ini",(GKeyFileFlags)0,NULL)==-1){
     perror("加载config.ini失败！");
     return NULL;
   };
   char* devInfoCongfigPath = g_key_file_get_string(configFile,"config","devPath",NULL);
   if (devInfoCongfigPath==NULL)
   {
     perror("devInfoCongfigPath is null！");
     return NULL;
   }
   
   //1.2 从配置文件中读取配置
    GKeyFile* devInfoFile = g_key_file_new();
   if(g_key_file_load_from_file(devInfoFile,devInfoCongfigPath,(GKeyFileFlags)0,NULL)==-1){
     perror("加载devInfoCongfigPath失败！");
     return NULL;
   };
   gatewayIp = g_key_file_get_string(devInfoFile,"config","gatewayIp",NULL);

   return gatewayIp;
  
}
//获取sn ==sn缓存==
gchar* getSn(){
  if (sn != NULL)
  {
    printf("从缓存中获取到sn了\n");
    return sn;
  }
  
  //打开文件
  //FILE* file =  fopen("/sys/class/dmi/id/product_serial","r");
  //给sn分配空间
  //sn = (gchar *)calloc(1,128);
  //读取一行数据到sn
  //fgets(sn,128,file);
  sn = "jjjjjjjjj";
  g_print("sn=%s\n",sn);
  return sn;
}

void* recvConfigMsg(void *param){
    while (1)
    {     
        //1.通过进程通讯 通知 另外一个心跳进程--可以去向服务器注册广告机
        //获取mqId
        int mqId = getMsgQueue(PATHNAME_BOA_MAIN,PROCESS_ID_BOA_MAIN);

        Message msg={
             .type=1
        };
        printf("start recv msg \n");
        int ret = recvMsg(mqId,&msg,MSG_SIZE);  //0,第一个类型，0表示阻塞等待
        if (ret == -1)
        {
           perror("recive msg error: ");        
        }

        printf("type is %ld,msg is %s\n",msg.type,msg.text);
        //触发发送消息到网关代码
        //发送请求的代码 ---sn  地址 http://47.109.65.208/config.json
         sendConfigRequest(getSn());

     }


}



int main(int argc, char const *argv[])
{
    //1.接收boa进程发送消息 
    //新开一个线程去接收消息 ---发送请求到网关
    pthread_t pid;
    pthread_create(&pid,NULL,recvConfigMsg,NULL);

    //2.发送心跳请求 每过5分钟发送一次请求
    while (1)
    {
        
        //调用发送心跳请求的代码
        sleep(5);
        gchar * ipTemp = getGateWayIp();
        printf("ip value: %s\n",ipTemp);
        if (ipTemp==NULL)
        {
           continue;
        }        
        //发送心跳请求
       
       
        sendHeartRequest(ipTemp,getSn());
        printf("qwert\n");
    }
    return 0;
}
